package com.briup.utils;

/**
 * @author yuxi
 * @version 1.0
 * @date 2025/11/7
 * @Description:
 */


import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtils {
    //想要在类加载的时候只做一次：创建连接池==》静态代码块
    //连接池唯一，只有一个连接池对象==》静态变量
    private static DataSource ds;
    private JdbcUtils(){}
    static {
        //1.加载properties参数
        //2.根据参数通过Druid的连接池工厂创建连接池
        // --》多态形式赋值
        try{
            Properties pro=new Properties();
            InputStream is=JdbcUtils.class.
                    getClassLoader().
                    getResourceAsStream(
                            "druid.properties");
            pro.load(is);//将文件里的内容变成map集合
            ds= DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //给外界提供获取连接的方法
    public static Connection getConn(){
        try {
            return ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //额外提供了关闭资源的方法
    //PrepareStatement是Statement的子接口
    public static void close(ResultSet rs,
                             Statement stms,
                             Connection conn){
        try{
            if(rs!=null) rs.close();//真正关闭
            if(stms!=null) stms.close();//真正关闭
            if(conn!=null) conn.close();//放回到连接池中
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //方法重载
    public static void close(Statement stms,
                             Connection conn){
        close(null,stms,conn);
    }
}
